package 一个简单的netty例子; /**
 * Copyright (C), 2015-2019, XXX有限公司
 * FileName: 一个简单的netty例子.IOServer
 * Author:   kadibeieun
 * Date:     2019/8/12 11:31
 * Description: 客户端每隔两秒发送一个带有时间戳的"hello world"给服务端，服务端收到之后打印。
 * History:
 * <author>          <time>          <version>          <desc>
 * 作者姓名           修改时间           版本号              描述
 */

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 〈一句话功能简述〉<br> 
 * 〈客户端每隔两秒发送一个带有时间戳的"hello world"给服务端，服务端收到之后打印。〉
 *
 * @author kadibeieun
 * @create 2019/8/12
 * @since 1.0.0
 */
public class IOServer {
    public static void main(String[] args) throws Exception{
        ServerSocket serverSocket = new ServerSocket(8000);


        // (1) 接收新连接线程
        new Thread(() -> {
            while (true) {
                try {
                    // (1) 阻塞方法获取新的连接
                    Socket socket = serverSocket.accept();

                    // (2) 每一个新的连接都创建一个线程，负责读取数据
                    new Thread(() -> {
                        try {
                            byte[] data = new byte[1024];
                            InputStream inputStream = socket.getInputStream();
                            while (true) {
                                int len;
                                // (3) 按字节流方式读取数据
                                while ((len = inputStream.read(data)) != -1) {
                                    System.out.println(new String(data, 0, len));
                                }
                            }
                        } catch (IOException e) {
                        }
                    }).start();

                } catch (IOException e) {
                }

            }
        }).start();
    }

}